import mysql.connector
import os

# MySQL 连接配置
db_config = {
    'user': '1',
    'password': '1!',
    'host': '111',
    'database': '1111',
}

# 导出的文件路径
output_file = './export/all/所有表_结构_数据.sql'

# 确保导出目录存在
export_dir = os.path.dirname(output_file)
if not os.path.exists(export_dir):
    os.makedirs(export_dir)

# 连接 MySQL
conn = mysql.connector.connect(**db_config)
cursor = conn.cursor()

def get_all_tables():
    """获取当前数据库的所有表名"""
    cursor.execute("SHOW TABLES")
    return [table[0] for table in cursor.fetchall()]

def export_table_structure_and_data(table_name, f):
    """导出单个表的表结构和前10条数据到同一个文件"""
    # 打印当前正在处理的表名，便于调试
    print(f"正在处理表: {table_name}")

    try:
        # 导出表结构，使用反引号包裹表名
        cursor.execute(f"SHOW CREATE TABLE `{table_name}`")
        result = cursor.fetchone()
    except mysql.connector.Error as err:
        print(f"Error exporting table structure for {table_name}: {err}")
        return

    if result:
        create_table_sql = result[1]
        f.write(f"-- 表结构: {table_name}\n")
        f.write(create_table_sql + ";\n\n")
        print(f"表 {table_name} 的结构已导出")

    try:
        # 导出前10条数据，使用反引号包裹表名
        query = f"SELECT * FROM `{table_name}` LIMIT 10"
        cursor.execute(query)
        rows = cursor.fetchall()
        print(f"Executing query: {query}")  # 打印 SQL 语句，便于调试
    except mysql.connector.Error as err:
        print(f"Error exporting data for {table_name}: {err}")
        return

    column_names = [i[0] for i in cursor.description]

    if rows:
        f.write(f"-- 数据: {table_name} (前10条记录)\n")
        for row in rows:
            # 生成 INSERT 语句
            values = ', '.join([f"'{str(item)}'" if item is not None else 'NULL' for item in row])
            insert_sql = f"INSERT INTO `{table_name}` ({', '.join(column_names)}) VALUES ({values});\n"
            f.write(insert_sql)
        f.write("\n")
        print(f"表 {table_name} 的前 10 条数据已导出")
    else:
        f.write(f"-- 表 {table_name} 中无数据\n")

# 获取当前数据库的所有表
tables = get_all_tables()

# 打开一个文件，将所有表的结构和数据写入同一个文件
with open(output_file, 'w', encoding='utf-8') as f:
    for table in tables:
        export_table_structure_and_data(table, f)

# 关闭连接
cursor.close()
conn.close()

print(f"所有表的结构和数据已导出到 {output_file}")
